自我介绍 (5 分钟)
基础问题 (10 分钟)
框架
- fiber 原理
- diff 算法流程
- 虚拟 DOM
- Hooks 相关
- Vue3 比 Vue2 好的地方
- Vue2 Vue3 分别的响应式原理
- 依赖如何收集
- Vue2 的缺点
高级
- 依赖注入(说到 vscode 的架构的时候引出)
JS
- TODO: 模块化 ( UMD 发散到 Vite)
- 模块联邦?
- for in/for of. for in 循环对象,配合
obj.hasOwnProperty(key)使用 - babel 的工作原理?
- TODO: 事件循环模型
- e.target 和 e.currentTarget 的区别
- 装饰器
CSS
- 黑白主题切换如何实现
前端
- 前端优化一般怎么做?
网络
- 三次握手、四次挥手
- TODO: Url 加载流程
- 浏览器缓存
- 强: Expires/Cache-Control: max-age; 弱: Last-Modified/If-Modified-Since, ETag/If-None-Match
- Cookie/Session
- 登录态如何种入。 (发散到前端安全)
- TODO: https 是如何工作的。https 证书如何签发? (从本地的 cli 中引入自签名证书引入)
- https 的加密流程?
- 证书颁发和验证流程
工程化
- Vite
- 为什么快?
- 构建原理和 HMR 原理
- 存在的问题
- Webpack
- loader 和 plugin。并简述手写的逻辑。组件库的 plugin or loader 处理修改人。 git log filename
- 性能优化方式
- Webpack5 直接使用 cache. 在 CI 中还需要将数据持久化。
安全
- 安全问题举例
- CSP 用来解决什么问题
项目 (20 分钟)
1. 介绍一下 vscode 这个项目 (10 分钟)
- 背景、角色、做了什么、成果
- 背景:
- 数据 xxx 背景。
- 角色: 1.
- 做了什么:
- 底座定制
- 业务扩展完善
- 文件系统 + Git
- LSP
- ...
- 脚手架工具完善
- yo
- test-web
- nls
- intl
- VS Code/Theia 源码贡献
- 成果:
- 背景:
- 技术选型、架构、工程化
- 技术选型,为什么选择 vscode?为什么选择 Web 版
- vscode 架构和设计
- 如何深入源码定制
- 原则: 尽可能不大概原有模块。
- 遇到的困难
- 部署。
- worker 的跨域解决方式。
- 源码同步更新。 质量如何保证? => 测试 => 单元测试、集成测试
- 深入源码定制。 无法使用 React 定制? 原因
- 流程推动。
- 部署。
延伸
- 应用市场如何做?
- Copilot 目前的进展是什么样的? vscode 扩展做了哪一些优化?你研究到什么程度? 如何内置扩展?
- Chat 部分有什么特别的?
- VS Code 不改很难实现的部分,该怎么修改? 没有发布的 API 该怎么使用?
2. 工程化 (5 分钟)
- 背景、角色、做了什么、成果
- 老工程的问题?
- 角色
- 既然你说到了,那你了解原理?
- vite
- webpack
- 打包如何优化
- 代码规范推广
- 困难:
- cli 工程年久失修
Vite 快的原因?
- 不是全部编译
- http 缓存
HMR Vite 和 Webpack 分别是怎么做的?
3. 微前端 (5 分钟)
- 背景、角色、做了什么、成果
- 背景:为什么需要微前端
- 既然你说到了,那你了解原理?
- 难点
场景 (10 分钟)
- TODO: 树、列表大数据虚拟列表的实现?
- TODO: 大文件上传的实现
- 新增一个 SDK 会如何设计
1. 重新设计类
- VS Code 二次开发有什么建议?
- 源码更新这一块:
- CI 首先需要完善。
2. xxx 怎么办?
手写 (15 分钟?)
- promise
- promise.all
- 微 宏任务的打印
- this 打印
- 深拷贝
- 实现最大并发是 2 的类
- 防抖、节流
算法
- 树
- 几种遍历方式
- 二叉树打印
- 链表
- 翻转
- 判断是否成环
- 爬楼梯
- 字符串
- 最大子序列和
- 最大回文子串